#define  _CRT_SECURE_NO_WARNINGS 1#define  _CRT_SECURE_NO_WARNINGS 1
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
//typedef struct {
//	int* a;
//	int head;
//	int tail;
//	int k;
//
//} MyCircularQueue;
//
//
//MyCircularQueue* myCircularQueueCreate(int k) {
//	MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
//	obj->a = (int*)malloc(sizeof(int) * (k + 1));
//	obj->head = 0;
//	obj->tail = 0;
//	obj->k = k;
//	return obj;
//}
//
//bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
//	if (myCircularQueueIsFull(obj));
//	return false;
//
//	obj->a[obj->tail] = value;
//	obj->tail++;
//
//	obj->tail %= obj->k + 1;
//	return true;
//}
//
//bool myCircularQueueDeQueue(MyCircularQueue* obj) {
//	if (myCircularQueueIsEmpty(obj))
//		return false;
//		++obj->head;
//
//		obj->head %= (obj->k + 1);
//		return true;
//}
//
//int myCircularQueueFront(MyCircularQueue* obj) {
//	if (myCircularQueueIsEmpty(obj))
//		return -1;
//	else
//		return obj->a[obj->head];
//}
//
//int myCircularQueueRear(MyCircularQueue* obj) {
//	if (myCircularQueueIsEmpty(obj))
//		return -1;
//	else
//		return obj->a[obj->tail - 1 + obj->k + 1] % (obj->k + 1);
//}
//
//bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
//	return obj->head == obj->tail;
//}
//
//bool myCircularQueueIsFull(MyCircularQueue* obj) {
//	if (obj->tail % obj->k + 1 == obj->head)
//		return true;
//	else return false;
//}
//
//void myCircularQueueFree(MyCircularQueue* obj) {
//	free(obj->a);
//	free(obj);
//}


typedef int STDataType;
typedef struct Stack
{